﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Reflection;

namespace GS1.Utilitario
{
    /// <summary>
    /// <para>Clase       : AdministrarConfig</para>
    /// <para>Descripcion : Clase que implementa el uso App.config</para>
    /// <para>Autor       : Pedro Miguel Vera Rafael</para>
    /// <para>Fecha       : 17/05/2011</para>
    /// <para>Empresa     : GS1 Peru</para>
    /// </summary>
    public class AdministrarConfig
    {

        #region --- Metodos ---
        /// <summary>
        /// Metodo: Que permite establecer un parametro del appSettings
        /// </summary>
        /// <param name="llave">Nombre del parametro</param>
        /// <param name="valor">Valor del parametro</param>
        public static void establecerConfig(string llave, string valor)
        {
            XmlDocument configXml = null;
            XmlNode n = null;
            string rutaconfig = string.Empty;

            try
            {
                configXml = new XmlDocument();
                rutaconfig = Assembly.GetCallingAssembly().GetModules()[0].FullyQualifiedName + ".config";
                configXml.Load(rutaconfig);

                n = configXml.SelectSingleNode("configuration/appSettings" + @"/add[@key=""" + llave + @"""]");
                if (n != null)
                {
                    n.Attributes["value"].InnerText = valor;
                }
                else
                {
                    throw new Exception("Parametro no existe");
                }
                configXml.Save(rutaconfig);
            }
            finally
            {
                configXml = null;
                n = null;
            }
        }

        /// <summary>
        /// Metodo: Que permite establecer un parametro de una seccion
        /// </summary>
        /// <param name="llave">Nombre del parametro</param>
        /// <param name="valor">Valor del parametro</param>
        /// <param name="nombreNodo">Seccion a trabajar</param>
        public static void establcerConfig(string llave, string valor, string nombreNodo)
        {
            XmlDocument configXml = null;
            XmlNode n = null;
            string rutaconfig = string.Empty;

            try
            {
                configXml = new XmlDocument();
                rutaconfig = Assembly.GetCallingAssembly().GetModules()[0].FullyQualifiedName + ".config";
                configXml.Load(rutaconfig);

                n = configXml.SelectSingleNode("configuration/" + nombreNodo + @"/add[@key=""" + llave + @"""]");
                if (n != null)
                {
                    n.Attributes["value"].InnerText = valor;
                }
                else
                {
                    throw new Exception("Parametro no existe");
                }
                configXml.Save(rutaconfig);
            }
            finally
            {
                configXml = null;
                n = null;
            }
        }

        /// <summary>
        /// Metodo: Que permite obtener un parametros del appSettings
        /// </summary>
        /// <param name="llave">Nombre del parametro</param>
        /// <returns>Valor del parametro</returns>
        public static string obtenerConfig(string llave)
        {
            XmlDocument configXml = null;
            XmlNode n = null;
            string parametro = string.Empty;
            string rutaconfig = string.Empty;

            try
            {
                configXml = new XmlDocument();
                rutaconfig = Assembly.GetCallingAssembly().GetModules()[0].FullyQualifiedName + ".config";
                configXml.Load(rutaconfig);

                n = configXml.SelectSingleNode("configuration/appSettings" + @"/add[@key=""" + llave + @"""]");
                if (n != null)
                {
                    parametro = n.Attributes["value"].InnerText;
                }
                else
                {
                    throw new Exception("Parametro no existe");
                }
            }
            finally
            {
                configXml = null;
                n = null;
            }
            return parametro;
        }

        /// <summary>
        /// Metodo: Que permite obtener un parametro de una seccion
        /// </summary>
        /// <param name="llave">Nombre del parametro</param>
        /// <param name="nombreNodo">Seccion a trabajar</param>
        /// <returns>Valor del parametro</returns>
        public static string obtenerConfig(string llave, string nombreNodo)
        {
            XmlDocument configXml = null;
            XmlNode n = null;
            string parametro = string.Empty;
            string rutaconfig = string.Empty;

            try
            {
                configXml = new XmlDocument();
                rutaconfig = Assembly.GetCallingAssembly().GetModules()[0].FullyQualifiedName + ".config";
                configXml.Load(rutaconfig);

                n = configXml.SelectSingleNode("configuration/" + nombreNodo + @"/add[@key=""" + llave + @"""]");
                if (n != null)
                {
                    parametro = n.Attributes["value"].InnerText;
                }
                else
                {
                    throw new Exception("Parametro no existe");
                }
            }
            finally
            {
                configXml = null;
                n = null;
            }
            return parametro;
        }
        #endregion

    }

}
